home *** CD-ROM | disk | FTP | other *** search
- package koala.dynamicjava.interpreter;
-
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.util.Iterator;
- import java.util.List;
- import koala.dynamicjava.classinfo.ClassInfo;
- import koala.dynamicjava.classinfo.TreeClassInfo;
- import koala.dynamicjava.interpreter.context.Context;
- import koala.dynamicjava.interpreter.context.GlobalContext;
- import koala.dynamicjava.interpreter.error.ExecutionError;
- import koala.dynamicjava.parser.wrapper.ParserFactory;
- import koala.dynamicjava.parser.wrapper.SourceCodeParser;
- import koala.dynamicjava.tree.Node;
- import koala.dynamicjava.tree.TypeDeclaration;
- import koala.dynamicjava.util.ImportationManager;
- import koala.dynamicjava.util.LibraryFinder;
-
- public class TreeCompiler {
- protected Interpreter interpreter;
- protected TreeClassLoader classLoader;
- protected ClassInfoLoader classInfoLoader;
- protected ClassPool classPool = new ClassPool();
-
- public Class compile(String var1) throws ClassNotFoundException {
- this.loadClass(var1);
- return this.compileClasses(var1);
- }
-
- public Class compileClasses(String var1) throws ClassNotFoundException {
- Class var2 = null;
- ClassInfo var3;
- if (this.classPool.contains(var1)) {
- while((var3 = this.classPool.getFirstCompilable()) != null) {
- if (!this.classExists(var3.getName())) {
- Class var4 = this.compileClass(var3, var1);
- if (var4 != null) {
- var2 = var4;
- }
- } else {
- var3.setCompilable(false);
- }
- }
- }
-
- if (var2 == null) {
- throw new ClassNotFoundException(var1);
- } else {
- return var2;
- }
- }
-
- public Class compileTree(Context var1, TypeDeclaration var2) {
- TreeClassFinder var3 = new TreeClassFinder(var1, this.interpreter, this.classPool);
- TreeClassInfo var4 = new TreeClassInfo(var2, var3);
- this.classPool.add(var4.getName(), var4);
-
- try {
- return this.compileClasses(var4.getName());
- } catch (ClassNotFoundException var6) {
- var2.setProperty("errorStrings", new String[]{var2.getName()});
- throw new ExecutionError("undefined.or.defined.class", var2);
- }
- }
-
- protected Class compileClass(ClassInfo var1, String var2) {
- Class var3 = null;
- ClassInfo var4 = var1.getSuperclass();
- if (var4.isCompilable() && !this.classExists(var4.getName())) {
- Class var5 = this.compileClass(var4, var2);
- if (var5 != null) {
- var3 = var5;
- }
- }
-
- ClassInfo[] var9 = var1.getInterfaces();
-
- for(int var6 = 0; var6 < var9.length; ++var6) {
- var4 = var9[var6];
- if (var4.isCompilable() && !this.classExists(var4.getName())) {
- Class var7 = this.compileClass(var4, var2);
- if (var7 != null) {
- var3 = var7;
- }
- }
- }
-
- Class var10 = (new ClassInfoCompiler(var1)).compile();
- var1.setCompilable(false);
- if (var2.equals(var10.getName())) {
- var3 = var10;
- }
-
- return var3;
- }
-
- protected boolean classExists(String var1) {
- return this.classLoader.hasDefined(var1);
- }
-
- protected void loadClass(String var1) throws ClassNotFoundException {
- if (!this.classPool.contains(var1)) {
- TypeDeclaration var2 = this.classLoader.getTree(var1);
- if (var2 != null) {
- ImportationManager var14 = (ImportationManager)var2.getProperty("importationManager");
- GlobalContext var16 = new GlobalContext(this.interpreter, this.classInfoLoader);
- var14.setClassLoader(this.classInfoLoader);
- var16.setImportationManager(var14);
- TreeClassFinder var18 = new TreeClassFinder(var16, this.interpreter, this.classPool);
- this.classPool.add(var1, new TreeClassInfo(var2, var18));
- } else {
- LibraryFinder var3 = this.interpreter.getLibraryFinder();
-
- try {
- String var4 = var3.findCompilationUnitName(var1);
- var2 = this.classLoader.getTree(var4);
- if (var2 != null) {
- ImportationManager var17 = (ImportationManager)var2.getProperty("importationManager");
- GlobalContext var19 = new GlobalContext(this.interpreter, this.classInfoLoader);
- var17.setClassLoader(this.classInfoLoader);
- var19.setImportationManager(var17);
- TreeClassFinder var20 = new TreeClassFinder(var19, this.interpreter, this.classPool);
- this.classPool.add(var4, new TreeClassInfo(var2, var20));
- return;
- }
- } catch (ClassNotFoundException var11) {
- }
-
- try {
- File var15 = var3.findCompilationUnit(var1);
- FileInputStream var5 = new FileInputStream(var15);
- ParserFactory var6 = this.interpreter.getParserFactory();
- SourceCodeParser var7 = var6.createParser(var5, var15.getCanonicalPath());
- List var8 = var7.parseCompilationUnit();
- Iterator var9 = var8.iterator();
- CompilationUnitVisitor var10000 = new CompilationUnitVisitor;
- if (this == null) {
- throw null;
- } else {
- var10000.<init>(this);
- CompilationUnitVisitor var10 = var10000;
-
- while(var9.hasNext()) {
- ((Node)var9.next()).acceptVisitor(var10);
- }
-
- }
- } catch (IOException var12) {
- throw new ClassNotFoundException(var1);
- }
- }
- }
- }
-
- public TreeCompiler(Interpreter var1) {
- this.interpreter = var1;
- this.classLoader = (TreeClassLoader)this.interpreter.getClassLoader();
- ClassInfoLoader var10001 = new ClassInfoLoader;
- if (this == null) {
- throw null;
- } else {
- var10001.<init>(this);
- this.classInfoLoader = var10001;
- }
- }
- }
-